//3.无重复字符的最长字串
#include<iostream>
#include<vector>
#include<unordered_set>
#include<utility>
using namespace std;

int lengthOfLongestSubstring(string s) {
    int left = 0, right = 0;

    int maxlen = 0;
    //定义一个set类型的哈希表
    unordered_set<char> hash;

    while(right<s.size()){
        //进窗口
        pair<unordered_set<char>::iterator,bool> p=hash.insert(s[right]);

        //当插入失败时，也就是遇到重复字符
        if(p.second==false){
            //出窗口，移动左指针找到重复的字符位置，移动加删除
            while(s[left]!=*(p.first)){
                hash.erase(s[left++]);
            }
            //当找到重复的字符时，删除左指针指向的该字符，插入右指针指向的该字符
            hash.erase(s[left++]);
            hash.insert(s[right]);
        }

        //更新最长字串的长度
        maxlen = max(maxlen, right - left + 1);
        right++;
    }

    return maxlen;
}

int main(){
    string s = {"tmmzuxt"};

    int minlen=lengthOfLongestSubstring(s);

    cout << minlen;
    return 0;
}